package ia_0;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import ia_0.Main;
import ia_0.Time;
import ia_0.data_model.Element;
import ia_0.data_model.Food;
import ia_0.data_model.House;
import ia_0.data_model.Water;
import ia_0.data_model.character.animal.AnimalDome;
import ia_0.data_model.character.human.Constructeur;
import ia_0.data_model.character.human.Eleveur;
import ia_0.data_model.character.human.Porteurs;
import ia_0.data_model.character.human.Chasseur;
import ia_0.World;
import ia_0.data_model.character.animal.AnimalSauvage;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 *
 * @author jderenty
 */
public class TestDisplay {

    World w;
    BufferedImage i;
    JFrame frame;
    int t=600;


    public void initWorld(){
        for(int x=0;x<t;x++){
            for(int y=0;y<t;y++){
                i.setRGB(x, y, Color.BLACK.getRGB());
            }
        }
        for(Element e:w.elements.keySet()){
            Point p=w.elements.get(e);
            couleurElement(e,p);
        }

        for(Point p :w.map.keySet()){
            couleurZone(w.map.get(p),p);
        }

        frame.repaint();
    }

    int cpt=0;
    public TestDisplay(){

         w=Main.w;
         i = new BufferedImage(t,t, BufferedImage.TYPE_INT_RGB);
        ImageIcon ii=new ImageIcon(i);

        frame=new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label=new JLabel(ii);
        
        
        
        final JButton b=new JButton("Start");

        b.addActionListener(new AbstractAction() {

            public void actionPerformed(ActionEvent e) {
                if (cpt > 0) {
                    Main.ti.cancel();
                    Main.ti.purge();
                    cpt = 0;
                    b.setText("Start");
                } else {
                    b.setText("Stop");
                    Main.task = new TimerTask() {

                        @Override
                        public void run() {
                            w.iterate();
                            initWorld();
                        }
                    };

                    Main.ti = new Timer();
                    Main.ti.scheduleAtFixedRate(Main.task, 0, Time.it);
                    cpt++;
                }

            }
        });

        frame.setLayout(new BorderLayout());
        frame.add(label,BorderLayout.NORTH);
        frame.add(b,BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);


    }

    public void couleur(Point p,Color c,int type){

        int a=p.x;
        int b=p.y;

        int x0=a*t/w.w;
        int x1=(a+1)*t/w.w;

        int y0=b*t/w.h;
        int y1=(b+1)*t/w.h;

        if(type==0){
            x0=x0+(x1-x0)/4;
            x1=x1-(x1-x0)/4;
            y0=y0+(y1-y0)/4;
            y1=y1-(y1-y0)/4;        }

        for(int x=x0;x<x1;x++){
            for(int y=y0;y<y1;y++){
                i.setRGB(x, y, c.getRGB());
            }
        }
    }

    public void couleurElement(Element e,Point p){

        if (e.getClass().isAssignableFrom(Eleveur.class)){
             couleur(p,Color.blue,0);
        } else if (e.getClass().isAssignableFrom(Food.class)){
             couleur(p,Color.red,1);
        } else if (e.getClass().isAssignableFrom(Constructeur.class)){
             couleur(p,Color.CYAN,0);
        } else if (e.getClass().isAssignableFrom(House.class)){
             couleur(p,Color.gray,1);
        } else if (e.getClass().isAssignableFrom(AnimalDome.class)){
             couleur(p,Color.ORANGE,1);
        } else if (e.getClass().isAssignableFrom(AnimalSauvage.class)){
             couleur(p,Color.YELLOW,1);
        } else if (e.getClass().isAssignableFrom(Water.class)){
             couleur(p,Color.WHITE,1);
        } else if (e.getClass().isAssignableFrom(Porteurs.class)){
             couleur(p,Color.PINK,0);
        } else if (e.getClass().isAssignableFrom(Chasseur.class)){
             couleur(p,Color.MAGENTA,0);
        }else{
             couleur(p,Color.black,1);
        }
    }


    private void couleurZone(World.Type get,Point p) {
        if (get.equals(World.Type.jungle)){
            couleur(p,Color.green,1);
        } else{
            couleur(p,Color.black,1);
        }
    }







}
